package object;

public class ObjectDemo {
    public static void main(String[] args) {
        /*
        输出引用变量时默认调用obje类的toString（）方法
        该方法返回的字符串格式为：类的全称@hashcode值
        但通常这个返回结果对我们开发是没有意义的
        我们真正想输出的应该是对象的属性值
        我们认为object类的toString（）并不能满足我们的需求
        因此我们常常重写toString
         */

/*
        Point p = new Point(100,200);
        System.out.println(p);
        System.out.println(p.toString());

        String str = "这是一个点："+p;//调用p的toString（）方法将其转换成字符串了
        System.out.println(str);

 */



        /*
        调用object类的equals（），内部还是在使用==比较地址，没有参考意义
        若想比较对象的属性值是否相同，我们认为object类的equals（）并不能满足需求
        因此常常需要重写equals（）来返回具体的属性值
         */
        Point p1 = new Point(100,200);
        Point p2 = new Point(100,200);
        System.out.println(p1==p2);//false，==比较的是地址
        //因为point类重写了equals（）方法
        //所以此处调用的是重写之后的equals（），比较的是属性的值是否相同
        System.out.println(p1.equals(p2));//false


        String s1 = new String("hello");
        String s2 = new String("hello");
        //String类重写了equals（）来比较字符串的内容是否相同
        System.out.println(s1.equals(s2));//true


        StringBuilder builder = new StringBuilder("hello");
        StringBuilder builder1 = new StringBuilder("hello");
        //StringBuilder类没有重写equals（），因此调用的还是object类的equals（）比较地址
        System.out.println(builder.equals(builder1));//false



        //s1与builder的类型不同，所以equals（）一定是false
        System.out.println(s1.equals(builder));//false


























































    }
}
